Skip to content

Conversation

@sanak
Copy link
Member

@sanak sanak commented Nov 29, 2025

Supports #74.

Changes proposed in this pull request:

@pgRouting/admins

Summary by CodeRabbit

  • New Features

    • Added Docker image support for PostgreSQL 18 with PostGIS 3.6.
    • Introduced pgRouting 4.0.0 image variants for PostgreSQL 14-18.
    • Expanded build matrix to include PostGIS 3.6 and pgRouting 4.0.
  • Updates

    • Upgraded osm2pgrouting to version 3.0.0 across images.
    • Updated Boost library versions to 1.83.0 for PostgreSQL 18 images.
    • Removed deprecated PostgreSQL 13 image variants.

✏️ Tip: You can customize this high-level summary in your review settings.

@sanak sanak self-assigned this Nov 29, 2025
@coderabbitai
Copy link

coderabbitai bot commented Nov 29, 2025

Walkthrough

This pull request updates the pgRouting Docker build matrix to support PostgreSQL versions 14–18, PostGIS 3.5–3.6, and pgRouting 3.7–4.0, removes obsolete version combinations, adds new pgRouting 4.0.0 support, updates osm2pgrouting to version 3.0.0, and upgrades boost library dependencies to 1.83.0.

Changes

Cohort / File(s) Summary
GitHub Actions Workflow
.github/workflows/main.yml
Expanded build matrix: PostgreSQL 14–18, PostGIS 3.5–3.6, pgRouting 3.7–4.0/main/develop; added matrix exclusions for unsupported combinations; introduced conditional continue-on-error for develop/main branches; added VERSION environment variable derived from matrix values.
Postgres 13 Removals
13-3.5-3.6/*, 13-3.5-3.7/*, 13-3.5-3.8/*, 13-3.5-develop/*, 13-3.5-main/*
Removed entire version directories including README.md, version.txt, and docker-compose.yml files; deprecated Postgres 13 support.
Postgres 14 Removals & Updates
14-3.5-3.6/* (deleted), 14-3.5-3.7/extra/Dockerfile, 14-3.5-3.8/extra/Dockerfile, 14-3.5-develop/extra/Dockerfile, 14-3.5-main/extra/Dockerfile
Removed pgRouting 3.6 variant entirely (45-line Dockerfile, docker-compose.yml, README.md deleted); updated OSM2PGROUTING_VERSION to 3.0.0 in remaining variants.
Postgres 14 pgRouting 4.0 Addition
14-3.5-4.0/*
Added new pgRouting 4.0.0 variant: updated PGROUTING_VERSION to 4.0.0 with new SHA256; added README, docker-compose.yml, Dockerfile with base image pgrouting/pgrouting:14-3.5-4.0.0; added version.txt.
Postgres 15 Removals & Updates
15-3.5-3.6/* (deleted), 15-3.5-3.7/extra/Dockerfile, 15-3.5-3.8/extra/Dockerfile, 15-3.5-develop/extra/Dockerfile, 15-3.5-main/extra/Dockerfile
Removed pgRouting 3.6 variant entirely (45-line Dockerfile, docker-compose.yml, README.md deleted); updated OSM2PGROUTING_VERSION to 3.0.0 in remaining variants.
Postgres 15 pgRouting 4.0 Addition
15-3.5-4.0/*
Added new pgRouting 4.0.0 variant: updated PGROUTING_VERSION to 4.0.0 with new SHA256; added README, docker-compose.yml, Dockerfile with base image pgrouting/pgrouting:15-3.5-4.0.0; added version.txt.
Postgres 16 Removals & Updates
16-3.5-3.6/* (deleted), 16-3.5-3.7/extra/Dockerfile, 16-3.5-3.8/extra/Dockerfile, 16-3.5-develop/extra/Dockerfile, 16-3.5-main/extra/Dockerfile
Removed pgRouting 3.6 variant entirely (45-line Dockerfile, docker-compose.yml, README.md deleted); updated OSM2PGROUTING_VERSION to 3.0.0 in remaining variants.
Postgres 16 pgRouting 4.0 Addition
16-3.5-4.0/*
Added new pgRouting 4.0.0 variant: updated PGROUTING_VERSION to 4.0.0 with new SHA256; added README, docker-compose.yml, Dockerfile with base image pgrouting/pgrouting:16-3.5-4.0.0; added version.txt.
Postgres 17 Removals & Updates
17-3.5-3.6/* (deleted), 17-3.5-3.7/extra/Dockerfile, 17-3.5-3.8/extra/Dockerfile, 17-3.5-develop/extra/Dockerfile, 17-3.5-main/extra/Dockerfile
Removed pgRouting 3.6 variant entirely (45-line Dockerfile, docker-compose.yml, README.md deleted); updated OSM2PGROUTING_VERSION to 3.0.0 in remaining variants.
Postgres 17 pgRouting 4.0 Addition
17-3.5-4.0/*
Added new pgRouting 4.0.0 variant: updated PGROUTING_VERSION to 4.0.0 with new SHA256; added README, docker-compose.yml, Dockerfile with base image pgrouting/pgrouting:17-3.5-4.0.0; added version.txt.
Postgres 18 New Variants
18-3.6-3.7/*, 18-3.6-3.8/*, 18-3.6-4.0/*, 18-3.6-develop/*, 18-3.6-main/*
Added five complete pgRouting variant directories for PostgreSQL 18/PostGIS 3.6: each includes Dockerfile (updated base to postgis/postgis:18-3.6, boost libraries to 1.83.0, postgresql-18 apt-mark), README, docker-compose.yml, version.txt, and extra/Dockerfile with OSM2PGROUTING_VERSION 3.0.0.
Dockerfile Version Updates
*/Dockerfile (14-3.5-4.0, 15-3.5-4.0, 16-3.5-4.0, 17-3.5-4.0, 18-3.6-*)`
Updated PGROUTING_VERSION to 4.0.0 with corresponding SHA256 hash; updated base images to newer pgrouting/postgis tags; upgraded Boost libraries from 1.74.0 to 1.83.0 for Postgres 18 variants; updated apt-mark from postgresql-13/14/15/16/17 to postgresql-18.
osm2pgrouting Version Bumps
*/extra/Dockerfile (14-3.5-3.7 through 18-3.6-main)
Updated OSM2PGROUTING_VERSION from 2.3.8 to 3.0.0 across all remaining variant Dockerfiles; also updated libpqxx from 6.4 to 7.10 in select variants (18-3.6-main).
Configuration & Metadata
README.md, extra/Dockerfile.template, update.sh
Updated main README with new version entries (pgRouting 4.0 for Postgres 14–18, 3.8 for Postgres 18/17); updated Dockerfile.template OSM2PGROUTING_VERSION to 3.0.0; modified update.sh: added Debian suite mapping for version 18 (trixie-slim), added PostGIS 3.6 suffix mapping, updated boost/libpqxx version logic for trixie, removed legacy buster/stretch handling.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Suggested reviewers

  • robe2
  • iosefa
  • krashish8

Poem

🐰 Versions hop and dance with glee,
From 13 to 18, wild and free,
Old variants fade, new ones bloom,
pgRouting 4.0 enters the room,
With boost and osm2pgrouting in tow,
Our Docker images steal the show!

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The pull request title clearly and accurately summarizes the main changes: adding pgRouting 4.0 support with PostGIS 3.6, PostgreSQL 18, and osm2pgrouting 3.0 upgrades, which aligns with the core objectives and most significant modifications in the changeset.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@sanak sanak force-pushed the add-pgr4.0-postgis3.6-pg18 branch from c09884b to 72abc53 Compare November 29, 2025 10:13
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
18-3.6-main/Dockerfile (1)

36-44: Missing apt-mark manual postgresql-18 before purge.

Unlike the sibling Dockerfiles (18-3.6-3.7/Dockerfile and 18-3.6-3.8/Dockerfile), this file doesn't include apt-mark manual postgresql-18 before apt purge -y --autoremove. This could potentially cause postgresql-18 to be marked as auto-installed and removed during the purge step.

Proposed fix
 && cd /
 && rm -rf /usr/src/pgrouting \
+ && apt-mark manual postgresql-18 \
 && apt purge -y --autoremove \
🤖 Fix all issues with AI agents
In @14-3.5-develop/extra/Dockerfile:
- Line 3: The Dockerfile sets ENV OSM2PGROUTING_VERSION but still includes an
obsolete build block for tools/osmium; remove the entire tools/osmium build step
(the sequence starting with "cd ../tools/osmium" through "make install") so the
image builds against osm2pgrouting v3.0.0 without trying to build the removed
tools/osmium directory; keep the existing osm2pgrouting build steps (the
cmake/make sequence for osm2pgrouting) and ensure no other references to
tools/osmium remain.

In @16-3.5-3.8/extra/Dockerfile:
- Line 3: You updated ENV OSM2PGROUTING_VERSION to 3.0.0 but did not document
the breaking changes; update the PR description and repository release notes
(and README or CHANGELOG) to list the breaking changes for osm2pgrouting
3.0.0—specifically the geometry column rename (the_geom → geom), ways table
restructures and column renames/additions (gid → id, osm_id, tag_id, etc.),
ways_vertices_pgr new columns (in_edges, out_edges), and that databases
upgrading from 2.3.8 require a schema migration—and include clear migration
guidance or links to migration scripts/SQL and any commands users must run to
upgrade their schemas safely.
🧹 Nitpick comments (6)
18-3.6-main/extra/Dockerfile (1)

27-32: Osmium tools build is commented out (WIP).

Per the PR description, the osmium tools build is temporarily disabled while work continues on building osm2pgrouting extras for PostgreSQL 18. Ensure this is tracked and re-enabled before final release.

Would you like me to open an issue to track re-enabling the osmium tools build for PostgreSQL 18?

16-3.5-4.0/README.md (1)

1-3: Use abbreviated version number for README documentation.

The README uses the full semantic version "4.0.0", but based on the established pattern in this project, README documentation should use abbreviated version numbers (e.g., "4.0") for readability, while full semantic versions (e.g., "4.0.0") are reserved for Docker image tags, version.txt files, and docker-compose.yml files.

Based on learnings, the pgRouting/docker-pgrouting project follows this convention consistently.

📝 Suggested revision
-# pgRouting 4.0.0 (pg16)
+# pgRouting 4.0 (pg16)

-pgRouting Docker image (version 4.0.0) built over [Postgres 16/PostGIS 3.5](https://hub.docker.com/r/postgis/postgis) and dependencies.
+pgRouting Docker image (version 4.0) built over [Postgres 16/PostGIS 3.5](https://hub.docker.com/r/postgis/postgis) and dependencies.
14-3.5-4.0/README.md (1)

1-3: Use abbreviated version number for README documentation.

The README uses the full semantic version "4.0.0", but based on the established pattern in this project, README documentation should use abbreviated version numbers (e.g., "4.0") for readability, while full semantic versions (e.g., "4.0.0") are reserved for Docker image tags, version.txt files, and docker-compose.yml files.

Based on learnings, the pgRouting/docker-pgrouting project follows this convention consistently.

📝 Suggested revision
-# pgRouting 4.0.0 (pg14)
+# pgRouting 4.0 (pg14)

-pgRouting Docker image (version 4.0.0) built over [Postgres 14/PostGIS 3.5](https://hub.docker.com/r/postgis/postgis) and dependencies.
+pgRouting Docker image (version 4.0) built over [Postgres 14/PostGIS 3.5](https://hub.docker.com/r/postgis/postgis) and dependencies.
README.md (1)

25-30: Section header may be misleading now that pgRouting 4.0 is included.

The section header on line 25 reads "With pgRouting v3:" but now includes pgRouting 4.0 entries. Consider updating the header to something like "With pgRouting releases:" or splitting into separate sections for v3 and v4.

18-3.6-3.8/extra/Dockerfile (2)

5-17: Consider using --no-install-recommends to reduce image size.

Adding --no-install-recommends to the apt install commands can reduce the final image size by avoiding unnecessary recommended packages.

♻️ Suggested optimization
 RUN apt update \
- && apt install -y \
+ && apt install -y --no-install-recommends \
         libpqxx-7.10 \
- && apt install -y \
+ && apt install -y --no-install-recommends \
         build-essential \

27-32: Commented osmium tools build acknowledged as WIP.

Per the PR description, this is temporarily commented out while working on osm2pgrouting extras for PostgreSQL 18.

Would you like me to open an issue to track re-enabling the osmium tools build once the WIP fixes are complete?

📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0f55724 and 9fe515a.

📒 Files selected for processing (91)
  • .github/workflows/main.yml
  • 13-3.5-3.6/README.md
  • 13-3.5-3.6/version.txt
  • 13-3.5-3.7/README.md
  • 13-3.5-3.7/version.txt
  • 13-3.5-3.8/README.md
  • 13-3.5-3.8/version.txt
  • 13-3.5-develop/README.md
  • 13-3.5-develop/version.txt
  • 13-3.5-main/README.md
  • 13-3.5-main/version.txt
  • 14-3.5-3.6/README.md
  • 14-3.5-3.6/docker-compose.yml
  • 14-3.5-3.6/extra/Dockerfile
  • 14-3.5-3.6/version.txt
  • 14-3.5-3.7/extra/Dockerfile
  • 14-3.5-3.8/extra/Dockerfile
  • 14-3.5-4.0/Dockerfile
  • 14-3.5-4.0/README.md
  • 14-3.5-4.0/docker-compose.yml
  • 14-3.5-4.0/extra/Dockerfile
  • 14-3.5-4.0/version.txt
  • 14-3.5-develop/extra/Dockerfile
  • 14-3.5-main/extra/Dockerfile
  • 15-3.5-3.6/README.md
  • 15-3.5-3.6/docker-compose.yml
  • 15-3.5-3.6/extra/Dockerfile
  • 15-3.5-3.6/version.txt
  • 15-3.5-3.7/extra/Dockerfile
  • 15-3.5-3.8/extra/Dockerfile
  • 15-3.5-4.0/Dockerfile
  • 15-3.5-4.0/README.md
  • 15-3.5-4.0/docker-compose.yml
  • 15-3.5-4.0/extra/Dockerfile
  • 15-3.5-4.0/version.txt
  • 15-3.5-develop/extra/Dockerfile
  • 15-3.5-main/extra/Dockerfile
  • 16-3.5-3.6/README.md
  • 16-3.5-3.6/docker-compose.yml
  • 16-3.5-3.6/extra/Dockerfile
  • 16-3.5-3.6/version.txt
  • 16-3.5-3.7/extra/Dockerfile
  • 16-3.5-3.8/extra/Dockerfile
  • 16-3.5-4.0/Dockerfile
  • 16-3.5-4.0/README.md
  • 16-3.5-4.0/docker-compose.yml
  • 16-3.5-4.0/extra/Dockerfile
  • 16-3.5-4.0/version.txt
  • 16-3.5-develop/extra/Dockerfile
  • 16-3.5-main/extra/Dockerfile
  • 17-3.5-3.6/README.md
  • 17-3.5-3.6/docker-compose.yml
  • 17-3.5-3.6/extra/Dockerfile
  • 17-3.5-3.6/version.txt
  • 17-3.5-3.7/extra/Dockerfile
  • 17-3.5-3.8/extra/Dockerfile
  • 17-3.5-4.0/Dockerfile
  • 17-3.5-4.0/README.md
  • 17-3.5-4.0/docker-compose.yml
  • 17-3.5-4.0/extra/Dockerfile
  • 17-3.5-4.0/version.txt
  • 17-3.5-develop/extra/Dockerfile
  • 17-3.5-main/extra/Dockerfile
  • 18-3.6-3.7/Dockerfile
  • 18-3.6-3.7/README.md
  • 18-3.6-3.7/docker-compose.yml
  • 18-3.6-3.7/extra/Dockerfile
  • 18-3.6-3.7/version.txt
  • 18-3.6-3.8/Dockerfile
  • 18-3.6-3.8/README.md
  • 18-3.6-3.8/docker-compose.yml
  • 18-3.6-3.8/extra/Dockerfile
  • 18-3.6-3.8/version.txt
  • 18-3.6-4.0/Dockerfile
  • 18-3.6-4.0/README.md
  • 18-3.6-4.0/docker-compose.yml
  • 18-3.6-4.0/extra/Dockerfile
  • 18-3.6-4.0/version.txt
  • 18-3.6-develop/Dockerfile
  • 18-3.6-develop/README.md
  • 18-3.6-develop/docker-compose.yml
  • 18-3.6-develop/extra/Dockerfile
  • 18-3.6-develop/version.txt
  • 18-3.6-main/Dockerfile
  • 18-3.6-main/README.md
  • 18-3.6-main/docker-compose.yml
  • 18-3.6-main/extra/Dockerfile
  • 18-3.6-main/version.txt
  • README.md
  • extra/Dockerfile.template
  • update.sh
💤 Files with no reviewable changes (26)
  • 16-3.5-3.6/version.txt
  • 15-3.5-3.6/README.md
  • 13-3.5-3.7/README.md
  • 13-3.5-3.8/version.txt
  • 13-3.5-main/README.md
  • 15-3.5-3.6/docker-compose.yml
  • 13-3.5-main/version.txt
  • 13-3.5-develop/README.md
  • 13-3.5-3.8/README.md
  • 13-3.5-3.7/version.txt
  • 16-3.5-3.6/README.md
  • 16-3.5-3.6/docker-compose.yml
  • 13-3.5-develop/version.txt
  • 13-3.5-3.6/README.md
  • 14-3.5-3.6/docker-compose.yml
  • 15-3.5-3.6/extra/Dockerfile
  • 13-3.5-3.6/version.txt
  • 17-3.5-3.6/docker-compose.yml
  • 17-3.5-3.6/README.md
  • 14-3.5-3.6/README.md
  • 14-3.5-3.6/version.txt
  • 15-3.5-3.6/version.txt
  • 14-3.5-3.6/extra/Dockerfile
  • 17-3.5-3.6/extra/Dockerfile
  • 17-3.5-3.6/version.txt
  • 16-3.5-3.6/extra/Dockerfile
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: sanak
Repo: pgRouting/docker-pgrouting PR: 69
File: README.md:26-30
Timestamp: 2025-05-02T14:13:52.206Z
Learning: In the pgRouting/docker-pgrouting project, it's an intentional design pattern to list abbreviated version numbers (e.g., 3.8) in the README documentation for readability, while using full semantic versions (e.g., 3.8.0) in the actual Docker image tags, version.txt files, and docker-compose.yml files.
📚 Learning: 2025-05-02T14:13:52.206Z
Learnt from: sanak
Repo: pgRouting/docker-pgrouting PR: 69
File: README.md:26-30
Timestamp: 2025-05-02T14:13:52.206Z
Learning: In the pgRouting/docker-pgrouting project, it's an intentional design pattern to list abbreviated version numbers (e.g., 3.8) in the README documentation for readability, while using full semantic versions (e.g., 3.8.0) in the actual Docker image tags, version.txt files, and docker-compose.yml files.

Applied to files:

  • 16-3.5-develop/extra/Dockerfile
  • 14-3.5-4.0/README.md
  • 14-3.5-3.7/extra/Dockerfile
  • 18-3.6-main/README.md
  • 18-3.6-3.8/Dockerfile
  • 15-3.5-develop/extra/Dockerfile
  • 17-3.5-4.0/extra/Dockerfile
  • 18-3.6-3.8/README.md
  • 18-3.6-4.0/docker-compose.yml
  • 15-3.5-4.0/Dockerfile
  • 15-3.5-main/extra/Dockerfile
  • 18-3.6-develop/docker-compose.yml
  • extra/Dockerfile.template
  • 16-3.5-4.0/docker-compose.yml
  • 18-3.6-develop/Dockerfile
  • 14-3.5-4.0/Dockerfile
  • 18-3.6-4.0/extra/Dockerfile
  • 18-3.6-main/Dockerfile
  • README.md
  • 17-3.5-main/extra/Dockerfile
  • 18-3.6-main/docker-compose.yml
  • 16-3.5-3.8/extra/Dockerfile
  • 15-3.5-3.7/extra/Dockerfile
  • 18-3.6-4.0/README.md
  • 18-3.6-3.7/Dockerfile
  • 18-3.6-3.7/docker-compose.yml
  • 14-3.5-4.0/docker-compose.yml
  • 18-3.6-3.7/extra/Dockerfile
  • 14-3.5-3.8/extra/Dockerfile
  • 17-3.5-3.7/extra/Dockerfile
  • 16-3.5-main/extra/Dockerfile
  • 14-3.5-main/extra/Dockerfile
  • 17-3.5-3.8/extra/Dockerfile
  • 18-3.6-3.8/extra/Dockerfile
  • 15-3.5-4.0/README.md
  • update.sh
  • 18-3.6-4.0/Dockerfile
  • 18-3.6-main/extra/Dockerfile
  • 14-3.5-4.0/extra/Dockerfile
  • 18-3.6-develop/README.md
  • .github/workflows/main.yml
  • 16-3.5-4.0/README.md
  • 17-3.5-4.0/Dockerfile
  • 16-3.5-4.0/extra/Dockerfile
  • 17-3.5-develop/extra/Dockerfile
  • 17-3.5-4.0/README.md
  • 18-3.6-develop/extra/Dockerfile
  • 14-3.5-develop/extra/Dockerfile
  • 15-3.5-4.0/extra/Dockerfile
  • 18-3.6-3.7/README.md
  • 18-3.6-3.8/docker-compose.yml
  • 16-3.5-3.7/extra/Dockerfile
  • 17-3.5-4.0/docker-compose.yml
  • 15-3.5-3.8/extra/Dockerfile
  • 16-3.5-4.0/Dockerfile
  • 15-3.5-4.0/docker-compose.yml
🪛 Shellcheck (0.11.0)
update.sh

[warning] 29-29: defaultPostgisDebPkgNameVersionSuffix appears unused. Verify use (or export if used externally).

(SC2034)


[warning] 30-30: postgisDebPkgNameVersionSuffixes appears unused. Verify use (or export if used externally).

(SC2034)

🔇 Additional comments (65)
14-3.5-4.0/version.txt (1)

1-1: LGTM!

The version string follows the project's established naming convention with full semantic versioning. Based on learnings, this is the expected format for version.txt files.

14-3.5-4.0/docker-compose.yml (1)

3-3: LGTM!

The image tag 14-3.5-4.0.0 is consistent with the corresponding version.txt file and follows the project's naming convention.

17-3.5-4.0/version.txt (1)

1-1: LGTM!

Version string is consistent with the project's established naming convention.

18-3.6-main/version.txt (1)

1-1: LGTM!

The version string appropriately uses "main" suffix to indicate this image tracks the pgRouting main branch, consistent with the development branch naming pattern used elsewhere in the project.

14-3.5-develop/extra/Dockerfile (2)

27-32: The osmium tool build path is valid for osm2pgrouting 3.0.0.

The tools/osmium/ directory exists in the 3.0.0 release and includes CMakeLists.txt and all necessary build infrastructure (cmake subdirectory, src, include). The build commands will execute correctly.


5-7: libpqxx-6.4 is compatible with osm2pgrouting 3.0.0. Debian packaging for osm2pgrouting 3.0.0 explicitly uses libpqxx-6.4, and the osm2pgrouting CMakeLists.txt supports both libpqxx 6.x and 7.x versions. No dependency change needed.

17-3.5-3.7/extra/Dockerfile (1)

3-3: LGTM!

The osm2pgrouting version bump to 3.0.0 is consistent with the template and other Dockerfiles in this PR.

16-3.5-4.0/version.txt (1)

1-1: LGTM!

The version string 16-3.5-4.0.0 follows the project's established pattern, using the full semantic version for pgRouting as expected. Based on learnings, this is consistent with the intentional design pattern for version.txt files.

16-3.5-main/extra/Dockerfile (1)

3-3: LGTM!

The osm2pgrouting version bump to 3.0.0 is consistent across this PR's changes.

16-3.5-4.0/docker-compose.yml (1)

1-11: LGTM!

The docker-compose configuration correctly uses the full semantic version 16-3.5-4.0.0 for the image tag, which is consistent with the version.txt file and the project's established conventions. Based on learnings, this follows the intentional design pattern where abbreviated versions are used in directory names while full semantic versions are used in Docker image tags.

extra/Dockerfile.template (1)

3-3: Version bump to osm2pgrouting 3.0.0 is compatible with the build environment.

The release is legitimate (published 2025-11-01) and the required build dependencies (cmake >= 3.12, boost, expat, osmium2) are already included in the Dockerfile. Note that osm2pgrouting 3.0.0 introduces breaking schema changes: the ways table id column now uses identity generation (previously gid), and the geometry column name must be geom. These changes affect downstream database schemas but do not impact the Docker image build itself.

17-3.5-main/extra/Dockerfile (1)

3-3: LGTM!

Consistent osm2pgrouting 3.0.0 version bump matching other variants in this PR.

15-3.5-develop/extra/Dockerfile (1)

3-3: LGTM!

Consistent osm2pgrouting 3.0.0 version bump for the pg15 develop variant.

16-3.5-develop/extra/Dockerfile (1)

3-3: LGTM!

Consistent osm2pgrouting 3.0.0 version bump for the pg16 develop variant.

18-3.6-main/README.md (1)

1-3: LGTM!

Clear and concise documentation for the new pg18/PostGIS 3.6 variant. The abbreviated version format follows the project's established documentation pattern. Based on learnings, this is intentional for readability while full semantic versions are used in actual image tags.

16-3.5-3.7/extra/Dockerfile (1)

3-3: Version bump to osm2pgrouting 3.0.0 is compatible with libpqxx-6.4.

Verified that osm2pgrouting 3.0.0 explicitly handles PQXX versions 6.x and 7.x in its CMakeLists.txt. For PQXX < 7.0.0 (which includes libpqxx-6.4), it applies the -DPQXX_DISCONNECT flag and C++14 standard, ensuring compatibility. No minimum PQXX version is enforced, so the existing libpqxx-6.4 dependency is appropriate.

14-3.5-4.0/extra/Dockerfile (1)

1-3: LGTM – New extra Dockerfile for pgRouting 4.0.

The base image tag 14-3.5-4.0.0 correctly follows the project's full semantic versioning convention for Docker image tags. The osm2pgrouting 3.0.0 upgrade aligns with the other Dockerfiles in this PR.

14-3.5-3.8/extra/Dockerfile (1)

3-3: LGTM – Consistent osm2pgrouting version bump.

The upgrade to 3.0.0 is consistent with the other extra Dockerfiles in this PR.

17-3.5-develop/extra/Dockerfile (1)

3-3: LGTM – Consistent osm2pgrouting version bump.

The upgrade to 3.0.0 aligns with the broader osm2pgrouting version update across this PR.

18-3.6-develop/Dockerfile (2)

1-1: Base image verified.

The postgis/postgis:18-3.6 tag is available on Docker Hub. No issues identified.


10-16: The boost 1.83.0 packages are available in Debian Trixie, which is the base OS for postgis/postgis:18-3.6. All specified packages (libboost-atomic1.83.0, libboost-chrono1.83.0, libboost-graph1.83.0, libboost-date-time1.83.0, libboost-program-options1.83.0, libboost-system1.83.0, libboost-thread1.83.0) are packaged under Debian's SONAME-based naming convention and will be resolvable via apt.

17-3.5-4.0/README.md (1)

1-3: LGTM!

The README correctly documents the new pgRouting 4.0.0 image for PostgreSQL 17 with PostGIS 3.5. The format is consistent with other version-specific READMEs in the repository.

15-3.5-3.8/extra/Dockerfile (1)

3-3: LGTM!

The osm2pgrouting version bump to 3.0.0 aligns with the broader update across all extra Dockerfiles in this PR.

17-3.5-3.8/extra/Dockerfile (1)

3-3: LGTM!

Consistent osm2pgrouting 3.0.0 update matching the other extra Dockerfiles in this PR.

15-3.5-3.7/extra/Dockerfile (1)

3-3: LGTM!

Consistent osm2pgrouting 3.0.0 update. The upgrade applies uniformly across all pgRouting version variants.

16-3.5-4.0/extra/Dockerfile (1)

1-3: LGTM!

Base image and osm2pgrouting version updates are consistent with PR objectives for adding pgRouting 4.0 support. The osm2pgrouting 3.0.0 release is stable and accessible.

15-3.5-main/extra/Dockerfile (1)

3-3: LGTM - osm2pgrouting version upgrade.

The upgrade to OSM2PGROUTING_VERSION=3.0.0 is consistent with the coordinated version bump across all extra Dockerfiles in this PR.

15-3.5-4.0/extra/Dockerfile (1)

1-3: LGTM - Consistent version updates.

Base image correctly updated to 15-3.5-4.0.0 and OSM2PGROUTING_VERSION set to 3.0.0, aligning with the PR's objective to add pgRouting 4.0 and osm2pgrouting 3.0 support.

17-3.5-4.0/Dockerfile (2)

8-50: LGTM - Build process follows established pattern.

The build steps correctly:

  • Install Boost 1.74.0 runtime dependencies
  • Install build tools and development packages
  • Download, verify, and build pgRouting from source
  • Clean up build dependencies to minimize image size
  • Mark postgresql-17 as manually installed to prevent removal

5-6: SHA256 hash for pgRouting 4.0.0 is correct.

The hash ae87d30652b4a7824509e2652e02bde19e1a42c37906cdf1824b5df40af0bfd0 matches the official pgRouting v4.0.0 release.

14-3.5-3.7/extra/Dockerfile (1)

3-3: LGTM - osm2pgrouting version upgrade.

The upgrade to OSM2PGROUTING_VERSION=3.0.0 is consistent with the coordinated version bump across all extra Dockerfiles. This applies osm2pgrouting 3.0 to the pgRouting 3.7 image as well.

17-3.5-4.0/extra/Dockerfile (1)

1-3: Version updates are consistent with the coordinated upgrade across Dockerfiles.

The base image correctly references the new 17-3.5-4.0.0 tag, and OSM2PGROUTING_VERSION is appropriately updated to 3.0.0. The osm2pgrouting 3.0.0 release aligns with pgRouting 4.0 support and was released as a coordinated upgrade. Note that osm2pgrouting 3.0.0 introduces schema changes (new ways / ways_vertices_pgr structure and geom column naming), so users should review the release notes to account for these breaking changes if upgrading from earlier versions.

18-3.6-3.8/Dockerfile (1)

1-51: Well-structured Dockerfile for PostgreSQL 18 support.

The Dockerfile correctly:

  • Uses the new postgis/postgis:18-3.6 base image
  • Updates Boost libraries to 1.83.0 (appropriate for newer base images)
  • Uses apt-mark manual postgresql-18 to prevent accidental removal during cleanup
  • Includes SHA256 verification for the pgRouting tarball
  • Properly cleans up build dependencies to minimize image size
18-3.6-3.7/Dockerfile (1)

1-51: LGTM!

This Dockerfile follows the established pattern correctly:

  • Proper base image selection for PostgreSQL 18
  • Boost 1.83.0 dependencies aligned with the base image
  • apt-mark manual postgresql-18 correctly prevents accidental removal
  • SHA256 verification ensures tarball integrity
17-3.5-4.0/docker-compose.yml (1)

1-11: LGTM!

The docker-compose configuration follows project conventions:

  • Full semantic version 17-3.5-4.0.0 in the image tag (as per project's documented pattern)
  • Standard service configuration with port mapping and persistent volume
  • Minimal and functional setup appropriate for development/testing

Based on learnings, this correctly uses full semantic versions in docker-compose.yml files while abbreviated versions are used in README documentation.

18-3.6-4.0/Dockerfile (1)

1-51: LGTM!

The Dockerfile correctly sets up pgRouting 4.0.0 with PostgreSQL 18 and PostGIS 3.6. The boost library versions (1.83.0) are appropriate for Debian trixie, SHA256 verification is in place for source integrity, and build artifacts are properly cleaned up to minimize image size.

14-3.5-4.0/Dockerfile (1)

5-6: LGTM!

The pgRouting version and SHA256 hash are correctly updated to 4.0.0. The boost library versions (1.74.0) remain appropriate for the Debian bullseye base image used with PostgreSQL 14.

18-3.6-main/extra/Dockerfile (1)

1-45: LGTM on the osm2pgrouting 3.0.0 upgrade.

The osm2pgrouting version update and libpqxx-7.10 dependency are consistent with the Debian trixie base. Build and cleanup steps are properly structured.

update.sh (2)

54-63: LGTM on Debian trixie handling.

The new conditional branch correctly sets boost version to 1.83.0 and pqxx version to 7.10 for trixie, which aligns with the package versions available in Debian trixie and the changes in the PostgreSQL 18 Dockerfiles.


29-38: Unused variables flagged by static analysis require verification.

The variables defaultPostgisDebPkgNameVersionSuffix and postgisDebPkgNameVersionSuffixes appear to be defined but potentially unused in the script. Verify that these variables are not referenced elsewhere in the codebase before removing them, or document their intended future use if they are placeholders for upcoming functionality.

18-3.6-3.8/version.txt (1)

1-1: LGTM!

The version string follows the project's convention of using full semantic versions in version.txt files. Based on learnings, this is the intentional design pattern.

18-3.6-3.7/version.txt (1)

1-1: LGTM!

Version string correctly specifies PostgreSQL 18, PostGIS 3.6, and pgRouting 3.7.3 using the full semantic version format.

15-3.5-4.0/version.txt (1)

1-1: LGTM!

Version string correctly specifies PostgreSQL 15, PostGIS 3.5, and pgRouting 4.0.0 following the project's versioning conventions.

18-3.6-4.0/version.txt (1)

1-1: LGTM!

The version string follows the established project convention of using full semantic versions in version.txt files. Based on learnings, this pattern is intentional.

18-3.6-develop/version.txt (1)

1-1: LGTM!

The version string correctly identifies this as a development branch configuration for PostgreSQL 18 with PostGIS 3.6.

18-3.6-develop/docker-compose.yml (1)

3-3: LGTM!

The image tag correctly references the develop branch image and is consistent with the version.txt in the same directory.

18-3.6-main/docker-compose.yml (1)

3-3: LGTM!

The image tag correctly references the main branch image for PostgreSQL 18 with PostGIS 3.6.

15-3.5-4.0/docker-compose.yml (1)

3-3: LGTM!

The image tag uses the full semantic version as expected per project conventions. Based on learnings, this pattern is intentional for docker-compose.yml files.

18-3.6-develop/README.md (1)

1-3: LGTM! Documentation accurately reflects the develop branch configuration.

The README correctly documents the develop version built over Postgres 18/PostGIS 3.6, which aligns with the directory name 18-3.6-develop and the PR objectives to add PostgreSQL 18 support.

Note: The AI-generated summary claims "Removed documentation content" and mentions "Postgres 13/PostGIS 3.5", but the actual code shows this is a new file documenting Postgres 18/PostGIS 3.6.

15-3.5-4.0/README.md (1)

1-3: LGTM! Clear and consistent documentation.

The README accurately documents pgRouting 4.0.0 with PostgreSQL 15 and PostGIS 3.5, matching the directory structure and following the same pattern as other version-specific READMEs in this PR.

18-3.6-3.7/README.md (1)

1-3: LGTM! Documentation is accurate and well-structured.

The README correctly documents pgRouting 3.7.3 with PostgreSQL 18 and PostGIS 3.6, aligning with the directory naming convention.

18-3.6-3.8/README.md (1)

1-3: LGTM! Documentation follows the established pattern.

The README properly documents pgRouting 3.8.0 with PostgreSQL 18 and PostGIS 3.6, maintaining consistency with the directory structure and other version READMEs.

18-3.6-4.0/README.md (1)

1-3: LGTM!

The README correctly documents the new pgRouting 4.0.0 image for PostgreSQL 18 with PostGIS 3.6, following the project's established documentation pattern.

18-3.6-3.7/docker-compose.yml (1)

1-11: LGTM!

The docker-compose.yml follows the project's established pattern, using the full semantic version (3.7.3) in the image tag as expected. The configuration is consistent with other compose files in the repository.

18-3.6-3.8/docker-compose.yml (1)

1-11: LGTM!

The docker-compose.yml correctly references the 18-3.6-3.8.0 image tag, matching the directory structure. The configuration follows the project's established pattern.

15-3.5-4.0/Dockerfile (1)

5-6: LGTM!

The version and SHA256 are consistent with the other pgRouting 4.0.0 Dockerfiles, and the PostgreSQL 15-specific references (base image, apt-mark) are correct.

16-3.5-4.0/Dockerfile (1)

5-6: Version and SHA256 for pgRouting 4.0.0 are correct.

The SHA256 checksum matches the official pgRouting 4.0.0 release.

18-3.6-4.0/docker-compose.yml (1)

1-11: LGTM!

The docker-compose configuration follows the project's established patterns. The image tag uses the full semantic version (18-3.6-4.0.0) as expected per project conventions. The hardcoded POSTGRES_PASSWORD=postgres is acceptable for local development/testing purposes.

18-3.6-develop/extra/Dockerfile (1)

1-45: LGTM!

This Dockerfile is consistent with the 18-3.6-4.0/extra/Dockerfile structure, appropriately using the develop base image. The osm2pgrouting version and build process are identical, which is expected since these are generated from templates.

README.md (1)

26-54: Version entries look good.

The new version entries follow the established format and use abbreviated versions (e.g., 4.0, 3.8) in the documentation as expected per project conventions, while the Docker image tags reference full semantic versions. Based on learnings, this is the intentional design pattern for this project.

18-3.6-3.7/extra/Dockerfile (1)

1-45: LGTM!

This Dockerfile maintains consistency with the other extra Dockerfiles in this PR. The base image correctly references 18-3.6-3.7.3, and the osm2pgrouting version is updated to 3.0.0 as expected.

18-3.6-4.0/extra/Dockerfile (1)

1-45: Dockerfile structure looks good.

The single RUN command with chained operations is a good practice for minimizing Docker layers. The separation of runtime dependencies (libpqxx-7.10) from build dependencies, followed by cleanup of build tools, keeps the final image size minimal.

The osm2pgrouting v3.0.0 release is available and the tarball download will work as expected in the Dockerfile. The commented-out osmium tools build (lines 27-32) is understood to be WIP per the PR description.

18-3.6-3.8/extra/Dockerfile (2)

1-3: Base image and version configuration looks good.

The base image uses the full semantic version 18-3.6-3.8.0 which aligns with the project's convention of using abbreviated versions in folder names but full versions in image tags. Based on learnings, this is intentional design.


33-45: Cleanup section follows Docker best practices.

The cleanup correctly:

  • Removes source files from /usr/local/src
  • Purges build-time dependencies while preserving runtime dependencies (libpqxx-7.10, libexpat1)
  • Cleans apt cache to minimize image size
.github/workflows/main.yml (1)

19-33: Matrix configuration is correct and all required version folders exist.

The exclusion rules properly enforce:

  • PostgreSQL 14–17 paired only with PostGIS 3.5
  • PostgreSQL 18 paired only with PostGIS 3.6

All 25 expected version combination directories are present in the repository (14-17 with 3.5, and 18 with 3.6, each paired with pgrouting versions 3.7, 3.8, 4.0, main, and develop). CI jobs will execute without missing directory errors.

FROM pgrouting/pgrouting:14-3.5-develop

ENV OSM2PGROUTING_VERSION=2.3.8
ENV OSM2PGROUTING_VERSION=3.0.0
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🌐 Web query:

osm2pgrouting v3.0.0 release GitHub pgRouting

💡 Result:

osm2pgrouting v3.0.0 was released — highlights:

  • Requires cmake >= 3.12 and changes the geometry column name to geom. [1]
  • New "ways" table structure (id as bigint identity, geom geometry(LineString,4326), new/renamed columns such as length_m, source_osm/target_osm, etc.). [1]
  • New "ways_vertices_pgr" structure (id identity, in_edges/out_edges bigint[], stored x/y numeric, geom geometry(Point,4326)). [1]
  • Announcement/notes also referenced on release trackers and pgRouting/OSGeo discussion. [2][3]

Sources: GitHub release notes for v3.0.0. [1] Additional release summary/trackers. [2][3]


🏁 Script executed:

#!/bin/bash
# Check osm2pgrouting GitHub repository for v3.0.0 release
# Using curl instead of gh CLI since gh might not be available

echo "=== Checking osm2pgrouting releases via GitHub API ==="
curl -s "https://api.github.com/repos/pgRouting/osm2pgrouting/releases" | jq -r '.[] | "\(.tag_name) - \(.published_at)"' | head -20

echo ""
echo "=== Checking specifically for v3.0.0 ==="
curl -s "https://api.github.com/repos/pgRouting/osm2pgrouting/releases/tags/v3.0.0" | jq -r '.tag_name // "NOT FOUND"'

echo ""
echo "=== Checking osm2pgrouting repository tags ==="
curl -s "https://api.github.com/repos/pgRouting/osm2pgrouting/tags" | jq -r '.[] | .name' | head -20

Repository: pgRouting/docker-pgrouting

Length of output: 1229


🏁 Script executed:

#!/bin/bash
# Check if tools/osmium directory exists in v3.0.0
echo "=== Checking tools/osmium in v3.0.0 ==="
curl -s "https://api.github.com/repos/pgRouting/osm2pgrouting/contents/tools/osmium?ref=v3.0.0" | jq -r '.name // "NOT FOUND"'

echo ""
echo "=== Checking osm2pgrouting 3.0.0 CMakeLists.txt for build requirements ==="
curl -s "https://raw.githubusercontent.com/pgRouting/osm2pgrouting/v3.0.0/CMakeLists.txt" | head -50

echo ""
echo "=== Checking osm2pgrouting 3.0.0 README for dependencies ==="
curl -s "https://raw.githubusercontent.com/pgRouting/osm2pgrouting/v3.0.0/README.md" | head -80

Repository: pgRouting/docker-pgrouting

Length of output: 3879


🏁 Script executed:

#!/bin/bash
# Read the Dockerfile to see the actual build steps
echo "=== Reading 14-3.5-develop/extra/Dockerfile ==="
cat -n "14-3.5-develop/extra/Dockerfile"

Repository: pgRouting/docker-pgrouting

Length of output: 1506


Remove tools/osmium build steps—this directory no longer exists in osm2pgrouting v3.0.0.

The tools/osmium directory was removed in v3.0.0 (released 2025-11-01). Lines 27-32 will cause the build to fail. The osm2pgrouting 3.0.0 build itself (lines 22-26) is compatible with the specified dependencies (cmake >= 3.12, libpqxx-6.4, boost, expat, libosmium2) and should complete successfully without the osmium tool build steps.

Affected lines
 && cd ../tools/osmium/ \
 && mkdir build \
 && cd build \
 && cmake .. \
 && make \
 && make install \
🤖 Prompt for AI Agents
In @14-3.5-develop/extra/Dockerfile at line 3, The Dockerfile sets ENV
OSM2PGROUTING_VERSION but still includes an obsolete build block for
tools/osmium; remove the entire tools/osmium build step (the sequence starting
with "cd ../tools/osmium" through "make install") so the image builds against
osm2pgrouting v3.0.0 without trying to build the removed tools/osmium directory;
keep the existing osm2pgrouting build steps (the cmake/make sequence for
osm2pgrouting) and ensure no other references to tools/osmium remain.

FROM pgrouting/pgrouting:14-3.5-main

ENV OSM2PGROUTING_VERSION=2.3.8
ENV OSM2PGROUTING_VERSION=3.0.0
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

# Check if osm2pgrouting 3.0.0 release exists
curl -s "https://api.github.com/repos/pgRouting/osm2pgrouting/releases/tags/v3.0.0" | jq -r 'if .message then .message else "\(.tag_name) - Published: \(.published_at)" end'

# Also check the releases list to see available versions
curl -s "https://api.github.com/repos/pgRouting/osm2pgrouting/releases?per_page=10" | jq -r '.[].tag_name' | head -20

Repository: pgRouting/docker-pgrouting

Length of output: 180


🌐 Web query:

osm2pgrouting 3.0.0 release compatibility pgRouting

💡 Result:

osm2pgrouting 3.0.0 is the release that accompanies pgRouting 4.0.0 and is intended to be used with pgRouting 4.x (dependency shown as pgRouting 4.0.0). [1][2][3]

Sources:

  • pgRouting/osm2pgrouting repository (release/README). [1]
  • Homebrew formula showing osm2pgrouting 3.0.0 depends on pgrouting 4.0.0. [2]
  • pgRouting release announcement listing pgRouting 4.0.0 and osm2pgrouting 3.0.0 together. [3]

Version incompatibility: osm2pgrouting 3.0.0 requires pgRouting 4.x, but the base image uses pgRouting 3.5.

osm2pgrouting 3.0.0 is designed for and depends on pgRouting 4.0.0+. The base image 14-3.5-main provides pgRouting 3.5, which is incompatible with this version. Either downgrade to osm2pgrouting 2.3.9 (the latest 2.x release) or update the base image to pgRouting 4.x.

FROM pgrouting/pgrouting:16-3.5-3.8.0

ENV OSM2PGROUTING_VERSION=2.3.8
ENV OSM2PGROUTING_VERSION=3.0.0
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🌐 Web query:

osm2pgrouting 3.0.0 breaking changes release notes

💡 Result:

Summary of breaking changes in osm2pgrouting 3.0.0

  • Build: requires CMake >= 3.12. [1]
  • Geometry column renamed from the_geom to geom (geometry column name: geom). [1]
  • "ways" table reworked (column changes: gid→id (identity), added/renamed columns such as osm_id, tag_id, length_m, source_osm/target_osm, cost/reverse_cost/cost_s/reverse_cost_s, rule, one_way/oneway, x1/y1/x2/y2, maxspeed_forward/backward, priority, geom geometry(LineString,4326), etc.). [1]
  • "ways_vertices_pgr" table restructured: id (identity), new in_edges and out_edges bigint[] columns, x and y as numeric(11,8) (stored from geom), osm_id, geom geometry(Point,4326). [1]
  • General schema/column name and table-structure incompatibilities with pre-3.x databases (migration required). [1][2]

Sources: release notes / changelog for osm2pgrouting 3.0.0. [1] NewReleases summary of v3.0.0; [2] Debian package metadata showing upstream 3.0.0.


🏁 Script executed:

cd 16-3.5-3.8/extra && cat -n Dockerfile

Repository: pgRouting/docker-pgrouting

Length of output: 1456


osm2pgrouting 3.0.0 upgrade requires breaking change documentation.

The version upgrade is appropriate and the build process is compatible with 3.0.0. However, osm2pgrouting 3.0.0 introduces significant breaking changes that require user attention:

  • Geometry column renamed from the_geom to geom
  • ways table restructured with column renames and additions (gid→id, osm_id, tag_id, etc.)
  • ways_vertices_pgr table restructured with new columns (in_edges, out_edges)
  • Databases upgrading from 2.3.8 require schema migration

Ensure the PR or release notes clearly document these breaking changes and provide migration guidance for users.

🤖 Prompt for AI Agents
In @16-3.5-3.8/extra/Dockerfile at line 3, You updated ENV OSM2PGROUTING_VERSION
to 3.0.0 but did not document the breaking changes; update the PR description
and repository release notes (and README or CHANGELOG) to list the breaking
changes for osm2pgrouting 3.0.0—specifically the geometry column rename
(the_geom → geom), ways table restructures and column renames/additions (gid →
id, osm_id, tag_id, etc.), ways_vertices_pgr new columns (in_edges, out_edges),
and that databases upgrading from 2.3.8 require a schema migration—and include
clear migration guidance or links to migration scripts/SQL and any commands
users must run to upgrade their schemas safely.

@sanak sanak merged commit f40f7b8 into master Jan 13, 2026
50 of 51 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants